<?php
/**
 * 此文件包含了一些数组处理辅助函数
 *
 */

/**
 * 从数组第二维中抽出特定的列重组成数组
 *
 * @param array $arr
 * @param string $column
 * @return array
 */
function oa_array_get_column($arr, $column)
{
    if (empty($arr)) {
        return array();
    }
    $res = array();
    foreach ($arr as &$val) {
        $res[] = $val[$column];
    }
    return $res;
}

/**
 * 将2+维数组第2维的某列的值作为key
 *
 * @param array $arr input/out parameter
 * @param string $cloumn
 * @return void
 */
function oa_array_change_key(&$arr, $column)
{
    if (empty($arr)) {
        return;
    }
    $newArr = array();

    foreach ($arr as &$val) {
        $newArr[$val[$column]] = &$val;
    }
    $arr = $newArr;
}

/**
 * 将2+维数组第2维的某列的值作为key,不用引用格式
 *
 * @param array $arr input/out parameter
 * @param string $cloumn
 * @return void
 */
function oa_array_change_key_ref($arr, $column)
{
    if (empty($arr)) {
        return;
    }
    $newArr = array();

    foreach ($arr as &$val) {
        $newArr[$val[$column]] = &$val;
    }
    return $newArr;
}


/**
 * 复制数组的部分至另一个数组中
 * 
 * @param array $source 需要被复制的数组
 * @param array $dest 复制到的目标数组 out parameter
 * @param array $keys 需要被复制的键名数组 
 */
function oa_array_partial_copy($source, &$dest, $keys)
{
    $dest = array();
    foreach ($source as $key => $val) {
        if (in_array($key, $keys)) {
            $dest[$key] = $val;
        }
    }
}

/**
 * 在数组中通过给定某个字段的名和值返回一行数组或如果指定字段名则返回该字段名对应的值
 * 
 * @param string $name 已知的字段名
 * @param string $value 已知的字段值
 * @param string $array 要查找的数组
 * @param string $fieldName 如果指定要返回这行数组中某个字段的值,则赋字段名。
 * @return string | array
 */
function oa_array_find_by_name( $name, $value, $array ,$fieldName=false)
{
	foreach ($array as $v){
		if ($v[$name] == $value){
			if ($fieldName){
				return $v[$fieldName];
			}else{
				return $v;
			}
		}
	}
	return false;
}


/**
 * 在数组中通过给定某个字段的名和值返回一个数组或如果指定字段名则返回该字段名对应的值
 * 
 * @param string $name 已知的字段名
 * @param string $value 已知的字段值
 * @param string $array 要查找的数组
 * @return string | array
 */
function oa_array_find_by_name_arr( $name, $value, $array)
{
	$arr = '';
	foreach ($array as $v){
		if ($v[$name] == $value){
			$arr[]=$v;
			}
		}
	return $arr;
}